package com.hanamaki.base;

public class Demo03 {

    /**
     * 数据类型的转换
     * @param args
     */
    public static void main(String[] args) {

        /* 数据类型的转换
        * 1. 显示转换（强制转换）   由 大  的数据类型转小  大 -----> 小
        *   1. 从大到小的类型转换格式为   ： 小的数据类型 变量名 = (小的数据类型)大的变量名;
        * 2. 隐士转换（自动转换）   由 小  的数据类型转大  小 -----> 大
        *   1. 从小到大的类型转换格式为   :  大的数据类型 变量名 = 小的变量名;
        *  */

        int i = 128;
//        byte b = 128;  // 如果直接 给 byte 赋值 越界，会直接报编译时异常

        /* 强转 */
        /* 想要把 int i 转换为 byte b ?  */
        byte b = (byte) i; // 如果由大到小转换数据类型  如果超出小的数据类型的范围，取反码
        System.out.println(b);


        /*自动转换*/
        int c = 999;

        /* 我想把 int c  转换为  long ？ */
        long l = c;
        System.out.println(l);


        /* 浮点数 转整数      会丢失精度 */
        float f = 23.7f;  // 想要将 float  转换为  int    强转 √    自动
        System.out.println(f);
        int ii = (int) f;
        System.out.println(ii);


        /* 字符类型转换 */
        char cc = 'a';
        System.out.println(cc + 1);

        /* 表达式在运算时  如果除了 long 类型  有 int类型在其中，那么运算的结果的数据类型就是为  int
        * 如果  有 long  在运算完之后，就是 为 long  类型
        * 在整型 变量计算中  除了有long 类参与其中 ，默认的计算结果的数据类型为  int
        * */

        int t = cc + 1;
        System.out.println((char) t);



        /* 定义一个 大的数字   10亿 */
        int money = 1000000000;

        /* 在 jdk 1.7 中 引入了一种新的定义数字的方式 */
        int money1 = 10_0000_0000;

        System.out.println(money);
        System.out.println(money1);

        System.out.println((long) money * 20);
    }

}
